import { defineConfig, type UserConfigExport } from '@tarojs/cli'

import devConfig from './dev'
import prodConfig from './prod'

// https://taro-docs.jd.com/docs/next/config#defineconfig-辅助函数
export default defineConfig<'vite'>(async (merge, { command, mode }) => {
  const baseConfig: UserConfigExport<'vite'> = {
    projectName: 'my-taro-project',
    date: '2025-8-12',
    designWidth: 750,
    deviceRatio: {
      640: 2.34 / 2,
      750: 1,
      375: 2,
      828: 1.81 / 2
    },
    sourceRoot: 'src',
    outputRoot: 'dist',
    plugins: [
      "@tarojs/plugin-generator"
    ],
    defineConstants: {
      ENABLE_INNER_HTML: 'true',
      ENABLE_ADJACENT_HTML: 'true',
      ENABLE_SIZE_APIS: 'true',
      ENABLE_TEMPLATE_CONTENT: 'true',
      ENABLE_CLONE_NODE: 'true',
      ENABLE_CONTAINS: 'true'
    },
    copy: {
      patterns: [
      ],
      options: {
      }
    },
    framework: 'react',
    compiler: 'vite',
    mini: {
      // 微信小程序特定配置
      weapp: {
        // 启用 ES6 转 ES5
        es6: true,
        // 启用增强编译
        enhance: true,
        // 启用热重载
        compileHotReLoad: true,
        // 启用代码压缩
        minified: true,
        // 启用 postcss
        postcss: true,
        // 禁用 sourceMap 减少体积
        sourceMap: false,
        // 启用代码分包
        subPackages: true,
        // 启用代码压缩优化
        terser: {
          enable: true,
          config: {
            compress: {
              drop_console: true,  // 移除console.log
              drop_debugger: true, // 移除debugger
              pure_funcs: ['console.log', 'console.info', 'console.warn']
            }
          }
        }
      },
      postcss: {
        pxtransform: {
          enable: true,
          config: {

          }
        },
        cssModules: {
          enable: true, // 启用 css modules 功能
          config: {
            namingPattern: 'module', // 转换模式，取值为 global/module
            generateScopedName: '[name]__[local]___[hash:base64:5]'
          }
        }
      }
    },
    h5: {
      publicPath: '/',
      staticDirectory: 'static',

      miniCssExtractPluginOption: {
        ignoreOrder: true,
        filename: 'css/[name].[hash].css',
        chunkFilename: 'css/[name].[chunkhash].css'
      },
      postcss: {
        autoprefixer: {
          enable: true,
          config: {}
        },
        cssModules: {
          enable: true, // 启用 css modules 功能
          config: {
            namingPattern: 'module', // 转换模式，取值为 global/module
            generateScopedName: '[name]__[local]___[hash:base64:5]'
          }
        }
      },
    },
    rn: {
      appName: 'taroDemo',
      postcss: {
        cssModules: {
          enable: false, // 默认为 false，如需使用 css modules 功能，则设为 true
        }
      }
    }
  }


  if (process.env.NODE_ENV === 'development') {
    // 本地开发构建配置（不混淆压缩）
    return merge({}, baseConfig, devConfig)
  }
  // 生产构建配置（默认开启压缩混淆等）
  return merge({}, baseConfig, prodConfig)
})
